home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / patches / patchlibv4 / include / patch.i < prev    next >
Text File  |  1996-01-31  |  6KB  |  167 lines

  1.     IFND LIBRARIES_PATCH_I
  2. LIBRARIES_PATCH_I SET 1
  3. **
  4. **    Filename:    libraries/patch.i
  5. **    Release:    4.0
  6. **    Date:        31.01.96
  7. **
  8. **    (C) Copyright 1993-96 Stefan Fuchs
  9. **    All rights reserved
  10. **
  11. **      definition of patch.library public structures, returncodes and macros
  12.  
  13.  
  14.     IFND EXEC_TYPES_I
  15.     include "exec/types.i"
  16.     ENDC
  17.  
  18.     IFND EXEC_LISTS_I
  19.     include "exec/lists.i"
  20.     ENDC
  21.  
  22.     IFND EXEC_LIBRARIES_I
  23.     include "exec/libraries.i"
  24.     ENDC
  25.  
  26.     IFND EXEC_SEMAPHORES_I
  27.     include "exec/semaphores.i"
  28.     ENDC
  29.  
  30. ;-------------------------------------------------------------------------
  31. ;Structure required to install new patches via patch.library/InstallPatch()
  32.  
  33.  STRUCTURE NewPatch,0            ;this structure is OBSOLETE from V2 on
  34.     APTR    NPAT_NewCode        ;pointer to the patch code to be installed
  35.     ULONG    NPAT_NewCodeSize    ;optional length of NPAT_NewCode in bytes
  36.     APTR    NPAT_LibraryName    ;pointer to the LibraryName
  37.     UWORD    NPAT_LibVersion        ;version of Library to open
  38.     WORD    NPAT_LVO        ;LVO of function to patch
  39.     WORD    NPAT_Priority        ;Priority (-127...+126) of the patch
  40.     UWORD    NPAT_Flags        ;currently none defined (keep zero)
  41.     APTR    NPAT_PatchName        ;optional pointer to an IDString
  42.     LONG    NPAT_Result2        ;optional pointer to longword for Result2
  43.  
  44.  LABEL NPAT_SIZEOF
  45.  
  46. ;-------------------------------------------------------------------------
  47. ;ErrorCodes:
  48. PATERR_Ok        equ    0    ;Everything Ok
  49. PATERR_PatchInUse    equ    1    ;Patch Usecount <> 0
  50. PATERR_InvalidHandle    equ    2    ;Pointer to patch is not (no longer) valid
  51. PATERR_OutOfMem        equ    3    ;Out of memory
  52. PATERR_OpenLib        equ    4    ;Failed to open requested library
  53. PATERR_FuncNotStd    equ    5    ;Function to patch is not in the standard format
  54. PATERR_PatchInstalled    equ    6    ;Can't remove patch because another program has
  55.                     ;installed a non-patch.library patch later
  56. PATERR_InvalidTags    equ    7    ;There was an error in the combination of the specified Tags
  57. PATERR_OpenDev        equ    8    ;Failed to open requested device
  58. PATERR_NoTaskList    equ    9    ;PATT_AddTask... or PATT_RemTask... was specified for a patch,
  59.                     ;which had no PATT_CreateTaskList set
  60. PATERR_TaskListExists    equ    10    ;PATT_CreateTaskList was specified, but there already exists a TaskList
  61. PATERR_InvalidTaskList    equ    11    ;PATT_CreateTaskList was specified with a wrong parameter
  62. PATERR_PatchUnnamed    equ    12    ;PATT_PatchName with GetPatch was specified, for a patch without an IDString
  63. PATERR_NoSemaphore    equ    13    ;Could not allocate semaphore
  64.  
  65. ;-------------------------------------------------------------------------
  66. PATCHNAME    MACRO
  67.     dc.b "patch.library",0
  68.     ENDM
  69.  
  70. ;---------------------------------------------------------------
  71. ;--- FALLBACK - Call this macro instead of a 'rts' instruction
  72. ;--- in your patchcode, if you want to return to the original
  73. ;--- library code
  74. ;--- WARNING: The FALLBACK macro may be replaced by a better solution in V5,
  75. ;--- and may eventually no longer work in later versions. Please E-Mail me,
  76. ;--- if you use the FALLBACK macro.
  77. ;---------------------------------------------------------------
  78. FALLBACK    MACRO
  79.     move.l (sp),-(sp)
  80.     clr.l 4(sp)
  81.     rts
  82.  
  83.     ENDM
  84.  
  85. ;---------------------------------------------------------------
  86. ;--- GETPATCHBASE - Call this macro, if you need to call patch.library
  87. ;--- functions within a patchcode
  88. ;--- - DO NOT USE OUTSIDE A PATCHCODE
  89. ;--- - DO NOT USE, IF YOU PATCH EXEC.LIBRARY/FINDNAME()
  90. ;--- Returns patchbase in a6
  91. ;---------------------------------------------------------------
  92. GETPATCHBASE    MACRO
  93.     movem.l d0/d1/a0/a1,-(sp)
  94.     move.l 4.w,a6
  95.     move.l LibList(a6),a0
  96.     lea.l 2$(pc),a1
  97.     jsr -276(a6)        ;FindName
  98.     move.l d0,a6
  99.     movem.l (sp)+,d0/d1/a0/a1
  100.     bra 1$
  101. 2$    dc.b "patch.library",0
  102.     even
  103. 1$
  104.     ENDM
  105.  
  106.  
  107. ;----------------------------------------------------------------------------
  108. ;----------------------------------------------------------------------------
  109. ;The following structures are not needed by normal patch.library applications
  110. ;----------------------------------------------------------------------------
  111. ;----------------------------------------------------------------------------
  112.     STRUCTURE PatchBase,LIB_SIZE
  113.     UBYTE PB_Flags                ;no public flags defined
  114.     UBYTE PB_reserved1
  115.     ULONG PB_private1
  116.  
  117.     STRUCT    PB_Semaphore,SS_SIZE        ;Semaphore to protect MasterPatchList
  118.     STRUCT    PB_MasterPatchHeader,LH_SIZE    ;Listheader structure for MasterPatch structures
  119.  
  120.     ;...
  121.  
  122. ;-------------------------------------------------------------------------
  123. ; Before accessing this structure, make sure MPS_TYPE is PS_TYPE_MASTER
  124.  
  125.  STRUCTURE MasterPatch,0    ;This structure is READONLY
  126.     APTR    MPS_SUCC    ;Pointer to next (successor)
  127.     APTR    MPS_PRED    ;Pointer to previous (predecessor)
  128.     UBYTE    MPS_TYPE    ;MUST be PS_TYPE_MASTER
  129.     BYTE    MPS_PRI        ;Priority, for sorting
  130.     APTR    MPS_NAME    ;may contain a pointer to the name of the patched library
  131.                 ;To compensate the loss of a valid librarybase
  132.                 ;MPS_NAME is now (V4) guranteed to contain a valid name
  133.                 ;this may however be a library, device or resource name
  134.     UWORD    MPS_Flags            ;no public flags defined
  135.     STRUCT    MPS_PatchHeader,MLH_SIZE    ;Listheader Structure for Patch structures
  136.     APTR    MPS_Private01            ;This pointer, up to V3 known as MPS_PatchedLibraryBase
  137.                         ;has been renamed, because with the introduction of the
  138.                         ;PatchSupervisor it may or may not contain a valid
  139.                         ;librarybase, it may even contain 0.
  140.     UWORD    MPS_PatchedLVO            ;Library Vektor Offset in patched Library
  141.  
  142.     ;...
  143.  
  144. ;--------------------------------------------------------------------------
  145. ; Before accessing this structure, make sure PS_TYPE is either PS_TYPE_USER or PS_TYPE_SYSTEM
  146. ; Make sure your program can handle lists, that do not contain any nodes of
  147. ; PS_TYPE_USER or PS_TYPE_SYSTEM
  148.  
  149.  STRUCTURE Patch,0        ;This structure is READONLY
  150.     APTR    PS_SUCC        ;Pointer to next (successor)
  151.     APTR    PS_PRED        ;Pointer to previous (predecessor)
  152.     UBYTE    PS_TYPE        ;MUST be PS_TYPE_USER or PS_TYPE_SYSTEM
  153.     BYTE    PS_PRI        ;Priority, for sorting
  154.     APTR    PS_NAME        ;may contain a pointer to the name of the patch
  155.     UWORD    PS_Flags    ;no public flags defined
  156.  
  157.     ;...
  158.  
  159. ;-------------------------------------------------------------------------
  160. ;Public types for patch and masterpatch structures:
  161. PS_TYPE_MASTER    = 1    ;node is MasterPatch structure
  162. PS_TYPE_USER    = 2    ;node was installed by an Application using the library interface
  163. PS_TYPE_SYSTEM    = 3    ;node was installed by the support program PatchSetFunc
  164.  
  165.  
  166.     ENDC    ;LIBRARIES_PATCH_I
  167.